#include<iostream>
using namespace std;
int n,c;
int a[100000][2];
int az;
bool can(int b){
	if(((b*b)*c)>az){
		return false;
	}
	int count=0;
	for(int i=0;i<n;i++){
		int t1=a[i][1];
		int t0=a[i][0];
		count+=((t1/b)*(t0/b));
	}
	if(count>=c){
		return true;
	}
	else{
		return false;
	}
}
int main(){
	cin>>n>>c;
	int max=0;
	for(int i=0;i<n;i++){
		cin>>a[i][0]>>a[i][1];
		if(a[i][0]>max){
			max=a[i][0];
		}
		if(a[i][1]>max){
			max=a[i][1];
		}
		az+=(a[i][0]*a[i][1]);
	}
	int begin=1,end=max,be=(begin+end)/2;
	while(1){
		be=(begin+end)/2;
		if(begin==end){
			cout<<end;
			break;
		}
		else if(begin==end-1){
			if(can(end)==false){
				cout<<begin;
			}
			else{
				cout<<end;
			}
			break;
		} 
		if(can(be)==true){
			begin=be;
		} 
		else{
			end=be;
		}
	}
}
